/*
 * Copyright (C), 2015-2019
 * FileName: CommonValue
 * Author:   zhao
 * Date:     2019/2/8 20:38
 * Description: 用来存放一些静态不变数据
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.lizhaoblog.jjvm.common;

/**
 * 〈一句话功能简述〉<br>
 * 〈用来存放一些静态不变数据〉
 *
 * @author zhao
 * @date 2019/2/8 20:38
 * @since 1.0.0
 */
public class CommonValue {
    public static final int JDK_VERSION_MAJOR_02 = 46;
    public static final int JDK_VERSION_MAJOR_11 = 55;
    public static final int JDK_VERSION_MINOR_00 = 0;

    // 常量池的具体常量tag
    public static final int CONSTANT_POOL_TAG_UTF8 = 1;
    public static final int CONSTANT_POOL_TAG_INTEGER = 3;
    public static final int CONSTANT_POOL_TAG_FLOAT = 4;
    public static final int CONSTANT_POOL_TAG_LONG = 5;
    public static final int CONSTANT_POOL_TAG_DOUBLE = 6;
    public static final int CONSTANT_POOL_TAG_CLASS = 7;
    public static final int CONSTANT_POOL_TAG_STRING = 8;
    public static final int CONSTANT_POOL_TAG_FIELD_REF = 9;
    public static final int CONSTANT_POOL_TAG_METHOD_REF = 10;
    public static final int CONSTANT_POOL_TAG_INTERFACE_METHOD_REF = 11;
    public static final int CONSTANT_POOL_TAG_NAME_AND_TYPE = 12;
    public static final int CONSTANT_POOL_TAG_METHOD_HANDLE = 15;
    public static final int CONSTANT_POOL_TAG_METHOD_TYPE = 16;
    public static final int CONSTANT_POOL_TAG_INVOKE_DYNAMIC = 18;

    // 操作码opcode
    public static final int CONSTANT_OPCODE_ACONST_NULL = 0x01;// null值入栈。
    public static final int CONSTANT_OPCODE_ICONST_M1 = 0x02;// -1(int)值入栈。
    public static final int CONSTANT_OPCODE_ICONST_0 = 0x03;// 0(int)值入栈。
    public static final int CONSTANT_OPCODE_ICONST_1 = 0x04;// 1(int)值入栈。
    public static final int CONSTANT_OPCODE_ICONST_2 = 0x05;// 2(int)值入栈。
    public static final int CONSTANT_OPCODE_ICONST_3 = 0x06;// 3(int)值入栈。
    public static final int CONSTANT_OPCODE_ICONST_4 = 0x07;// 4(int)值入栈。
    public static final int CONSTANT_OPCODE_ICONST_5 = 0x08;// 5(int)值入栈。
    public static final int CONSTANT_OPCODE_LCONST_0 = 0x09;// 0(long)值入栈。
    public static final int CONSTANT_OPCODE_LCONST_1 = 0x0a;// 1(long)值入栈。
    public static final int CONSTANT_OPCODE_FCONST_0 = 0x0b;// 0(float)值入栈。
    public static final int CONSTANT_OPCODE_FCONST_1 = 0x0c;// 1(float)值入栈。
    public static final int CONSTANT_OPCODE_FCONST_2 = 0x0d;// 2(float)值入栈。
    public static final int CONSTANT_OPCODE_DCONST_0 = 0x0e;// 0(double)值入栈。
    public static final int CONSTANT_OPCODE_DCONST_1 = 0x0f;// 1(double)值入栈。
    public static final int CONSTANT_OPCODE_BIPUSH = 0x10;// valuebyte值带符号扩展成int值入栈。
    public static final int CONSTANT_OPCODE_SIPUSH = 0x11;// (valuebyte1 << 8) | valuebyte2 值带符号扩展成int值入栈。
    public static final int CONSTANT_OPCODE_LDC = 0x12;// 常量池中的常量值（int, float, string reference, object reference）入栈。
    public static final int CONSTANT_OPCODE_LDC_W = 0x13;// 常量池中常量（int, float, string reference, object reference）入栈。
    public static final int CONSTANT_OPCODE_LDC2_W = 0x14;// 常量池中常量（long, double）入栈。
    public static final int CONSTANT_OPCODE_ALOAD = 0x19;// 从局部变量indexbyte中装载引用类型值入栈。
    public static final int CONSTANT_OPCODE_ALOAD_0 = 0x2a;// 从局部变量0中装载引用类型值入栈。
    public static final int CONSTANT_OPCODE_ALOAD_1 = 0x2b;// 从局部变量1中装载引用类型值入栈。
    public static final int CONSTANT_OPCODE_ALOAD_2 = 0x2c;// 从局部变量2中装载引用类型值入栈。
    public static final int CONSTANT_OPCODE_ALOAD_3 = 0x2d;// 从局部变量3中装载引用类型值入栈。
    public static final int CONSTANT_OPCODE_ILOAD = 0x15;// 从局部变量indexbyte中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_ILOAD_0 = 0x1a;// 从局部变量0中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_ILOAD_1 = 0x1b;// 从局部变量1中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_ILOAD_2 = 0x1c;// 从局部变量2中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_ILOAD_3 = 0x1d;// 从局部变量3中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_LLOAD = 0x16;// 从局部变量indexbyte中装载long类型值入栈。
    public static final int CONSTANT_OPCODE_LLOAD_0 = 0x1e;// 从局部变量0中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_LLOAD_1 = 0x1f;// 从局部变量1中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_LLOAD_2 = 0x20;// 从局部变量2中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_LLOAD_3 = 0x21;// 从局部变量3中装载int类型值入栈。
    public static final int CONSTANT_OPCODE_FLOAD = 0x17;// 从局部变量indexbyte中装载float类型值入栈。
    public static final int CONSTANT_OPCODE_FLOAD_0 = 0x22;// 从局部变量0中装载float类型值入栈。
    public static final int CONSTANT_OPCODE_FLOAD_1 = 0x23;// 从局部变量1中装载float类型值入栈。
    public static final int CONSTANT_OPCODE_FLOAD_2 = 0x24;// 从局部变量2中装载float类型值入栈。
    public static final int CONSTANT_OPCODE_FLOAD_3 = 0x25;// 从局部变量3中装载float类型值入栈。
    public static final int CONSTANT_OPCODE_DLOAD = 0x18;// 从局部变量indexbyte中装载double类型值入栈。
    public static final int CONSTANT_OPCODE_DLOAD_0 = 0x26;// 从局部变量0中装载double类型值入栈。
    public static final int CONSTANT_OPCODE_DLOAD_1 = 0x27;// 从局部变量1中装载double类型值入栈。
    public static final int CONSTANT_OPCODE_DLOAD_2 = 0x28;// 从局部变量2中装载double类型值入栈。
    public static final int CONSTANT_OPCODE_DLOAD_3 = 0x29;// 从局部变量3中装载double类型值入栈。
    public static final int CONSTANT_OPCODE_AALOAD = 0x32;// 从引用类型数组中装载指定项的值。
    public static final int CONSTANT_OPCODE_IALOAD = 0x2e;// 从int类型数组中装载指定项的值。
    public static final int CONSTANT_OPCODE_LALOAD = 0x2f;// 从long类型数组中装载指定项的值。
    public static final int CONSTANT_OPCODE_FALOAD = 0x30;// 从float类型数组中装载指定项的值。
    public static final int CONSTANT_OPCODE_DALOAD = 0x31;// 从double类型数组中装载指定项的值。
    public static final int CONSTANT_OPCODE_BALOAD = 0x33;// 从boolean类型数组或byte类型数组中装载指定项的值（先转换为int类型值，后压栈）。
    public static final int CONSTANT_OPCODE_CALOAD = 0x34;// 从char类型数组中装载指定项的值（先转换为int类型值，后压栈）。
    public static final int CONSTANT_OPCODE_SALOAD = 0x35;// 从short类型数组中装载指定项的值（先转换为int类型值，后压栈）。
    public static final int CONSTANT_OPCODE_ASTORE = 0x3a;// 将栈顶引用类型值保存到局部变量indexbyte中。
    public static final int CONSTANT_OPCODE_ASTROE_0 = 0x4b;// 将栈顶引用类型值保存到局部变量0中。
    public static final int CONSTANT_OPCODE_ASTORE_1 = 0x4c;// 将栈顶引用类型值保存到局部变量1中。
    public static final int CONSTANT_OPCODE_ASTORE_2 = 0x4d;// 将栈顶引用类型值保存到局部变量2中。
    public static final int CONSTANT_OPCODE_ASTORE_3 = 0x4e;// 将栈顶引用类型值保存到局部变量3中。
    public static final int CONSTANT_OPCODE_ISTORE = 0x36;// 将栈顶int类型值保存到局部变量indexbyte中。
    public static final int CONSTANT_OPCODE_ISTORE_0 = 0x3b;// 将栈顶int类型值保存到局部变量0中。
    public static final int CONSTANT_OPCODE_ISTORE_1 = 0x3c;// 将栈顶int类型值保存到局部变量1中。
    public static final int CONSTANT_OPCODE_ISTORE_2 = 0x3d;// 将栈顶int类型值保存到局部变量2中。
    public static final int CONSTANT_OPCODE_ISTORE_3 = 0x3e;// 将栈顶int类型值保存到局部变量3中。
    public static final int CONSTANT_OPCODE_LSTORE = 0x37;// 将栈顶long类型值保存到局部变量indexbyte中。
    public static final int CONSTANT_OPCODE_LSTORE_0 = 0x3f;// 将栈顶long类型值保存到局部变量0中。
    public static final int CONSTANT_OPCODE_LSTORE_1 = 0x40;// 将栈顶long类型值保存到局部变量1中。
    public static final int CONSTANT_OPCODE_LSTORE_2 = 0x41;// 将栈顶long类型值保存到局部变量2中。
    public static final int CONSTANT_OPCODE_LSTROE_3 = 0x42;// 将栈顶long类型值保存到局部变量3中。
    public static final int CONSTANT_OPCODE_FSTORE = 0x38;// 将栈顶float类型值保存到局部变量indexbyte中。
    public static final int CONSTANT_OPCODE_FSTORE_0 = 0x43;// 将栈顶float类型值保存到局部变量0中。
    public static final int CONSTANT_OPCODE_FSTORE_1 = 0x44;// 将栈顶float类型值保存到局部变量1中。
    public static final int CONSTANT_OPCODE_FSTORE_2 = 0x45;// 将栈顶float类型值保存到局部变量2中。
    public static final int CONSTANT_OPCODE_FSTORE_3 = 0x46;// 将栈顶float类型值保存到局部变量3中。
    public static final int CONSTANT_OPCODE_DSTORE = 0x39;// 将栈顶double类型值保存到局部变量indexbyte中。
    public static final int CONSTANT_OPCODE_DSTORE_0 = 0x47;// 将栈顶double类型值保存到局部变量0中。
    public static final int CONSTANT_OPCODE_DSTORE_1 = 0x48;// 将栈顶double类型值保存到局部变量1中。
    public static final int CONSTANT_OPCODE_DSTORE_2 = 0x49;// 将栈顶double类型值保存到局部变量2中。
    public static final int CONSTANT_OPCODE_DSTORE_3 = 0x4a;// 将栈顶double类型值保存到局部变量3中。
    public static final int CONSTANT_OPCODE_AASTORE = 0x53;// 将栈顶引用类型值保存到指定引用类型数组的指定项。
    public static final int CONSTANT_OPCODE_IASTORE = 0x4f;// 将栈顶int类型值保存到指定int类型数组的指定项。
    public static final int CONSTANT_OPCODE_LASTORE = 0x50;// 将栈顶long类型值保存到指定long类型数组的指定项。
    public static final int CONSTANT_OPCODE_FASTORE = 0x51;// 将栈顶float类型值保存到指定float类型数组的指定项。
    public static final int CONSTANT_OPCODE_DASTORE = 0x52;// 将栈顶double类型值保存到指定double类型数组的指定项。
    public static final int CONSTANT_OPCODE_BASTROE = 0x54;// 将栈顶boolean类型值或byte类型值保存到指定boolean类型数组或byte类型数组的指定项。
    public static final int CONSTANT_OPCODE_CASTORE = 0x55;// 将栈顶char类型值保存到指定char类型数组的指定项。
    public static final int CONSTANT_OPCODE_SASTORE = 0x56;// 将栈顶short类型值保存到指定short类型数组的指定项。
    public static final int CONSTANT_OPCODE_WIDE = 0xc4;// 使用附加字节扩展局部变量索引（iinc指令特殊）。
    public static final int CONSTANT_OPCODE_NOP = 0x00;// 空操作。
    public static final int CONSTANT_OPCODE_POP = 0x57;// 从栈顶弹出一个字长的数据。
    public static final int CONSTANT_OPCODE_POP2 = 0x58;// 从栈顶弹出两个字长的数据。
    public static final int CONSTANT_OPCODE_DUP = 0x59;// 复制栈顶一个字长的数据，将复制后的数据压栈。
    public static final int CONSTANT_OPCODE_DUP_X1 = 0x5a;// 复制栈顶一个字长的数据，弹出栈顶两个字长数据，先将复制后的数据压栈，再将弹出的两个字长数据压栈。
    public static final int CONSTANT_OPCODE_DUP_X2 = 0x5b;// 复制栈顶一个字长的数据，弹出栈顶三个字长的数据，将复制后的数据压栈，再将弹出的三个字长的数据压栈。
    public static final int CONSTANT_OPCODE_DUP2 = 0x5c;// 复制栈顶两个字长的数据，将复制后的两个字长的数据压栈。
    public static final int CONSTANT_OPCODE_DUP2_X1 = 0x5d;// 复制栈顶两个字长的数据，弹出栈顶三个字长的数据，将复制后的两个字长的数据压栈，再将弹出的三个字长的数据压栈。
    public static final int CONSTANT_OPCODE_DUP2_X2 = 0x5e;// 复制栈顶两个字长的数据，弹出栈顶四个字长的数据，将复制后的两个字长的数据压栈，再将弹出的四个字长的数据压栈。
    public static final int CONSTANT_OPCODE_SWAP = 0x5f;// 交换栈顶两个字长的数据的位置。Java指令中没有提供以两个字长为单位的交换指令。
    public static final int CONSTANT_OPCODE_I2F = 0x86;// 将栈顶int类型值转换为float类型值。
    public static final int CONSTANT_OPCODE_I2L = 0x85;// 将栈顶int类型值转换为long类型值。
    public static final int CONSTANT_OPCODE_I2D = 0x87;// 将栈顶int类型值转换为double类型值。
    public static final int CONSTANT_OPCODE_F2I = 0x8b;// 将栈顶float类型值转换为int类型值。
    public static final int CONSTANT_OPCODE_F2L = 0x8c;// 将栈顶float类型值转换为long类型值。
    public static final int CONSTANT_OPCODE_F2D = 0x8d;// 将栈顶float类型值转换为double类型值。
    public static final int CONSTANT_OPCODE_L2I = 0x88;// 将栈顶long类型值转换为int类型值。
    public static final int CONSTANT_OPCODE_L2F = 0x89;// 将栈顶long类型值转换为float类型值。
    public static final int CONSTANT_OPCODE_L2D = 0x8a;// 将栈顶long类型值转换double类型值。
    public static final int CONSTANT_OPCODE_D2I = 0x8e;// 将栈顶double类型值转换为int类型值。
    public static final int CONSTANT_OPCODE_D2F = 0x90;// 将栈顶double类型值转换为float类型值。
    public static final int CONSTANT_OPCODE_D2L = 0x8f;// 将栈顶double类型值转换为long类型值。
    public static final int CONSTANT_OPCODE_I2B = 0x91;// 将栈顶int类型值截断成byte类型，后带符号扩展成int类型值入栈。
    public static final int CONSTANT_OPCODE_I2C = 0x92;// 将栈顶int类型值截断成char类型值，后带符号扩展成int类型值入栈。
    public static final int CONSTANT_OPCODE_I2S = 0x93;// 将栈顶int类型值截断成short类型值，后带符号扩展成int类型值入栈。
    public static final int CONSTANT_OPCODE_IADD = 0x60;// 将栈顶两int类型数相加，结果入栈。
    public static final int CONSTANT_OPCODE_ISUB = 0x64;// 将栈顶两int类型数相减，结果入栈。
    public static final int CONSTANT_OPCODE_IMUL = 0x68;// 将栈顶两int类型数相乘，结果入栈。
    public static final int CONSTANT_OPCODE_IDIV = 0x6c;// 将栈顶两int类型数相除，结果入栈。
    public static final int CONSTANT_OPCODE_IREM = 0x70;// 将栈顶两int类型数取模，结果入栈。
    public static final int CONSTANT_OPCODE_INEG = 0x74;// 将栈顶int类型值取负，结果入栈。
    public static final int CONSTANT_OPCODE_LADD = 0x61;// 将栈顶两long类型数相加，结果入栈。
    public static final int CONSTANT_OPCODE_LSUB = 0x65;// 将栈顶两long类型数相减，结果入栈。
    public static final int CONSTANT_OPCODE_LMUL = 0x69;// 将栈顶两long类型数相乘，结果入栈。
    public static final int CONSTANT_OPCODE_LDIV = 0x6d;// 将栈顶两long类型数相除，结果入栈。
    public static final int CONSTANT_OPCODE_LREM = 0x71;// 将栈顶两long类型数取模，结果入栈。
    public static final int CONSTANT_OPCODE_LNEG = 0x75;// 将栈顶long类型值取负，结果入栈。
    public static final int CONSTANT_OPCODE_IINC = 0x84;// 将整数值constbyte加到indexbyte指定的int类型的局部变量中。
    public static final int CONSTANT_OPCODE_FADD = 0x62;// 将栈顶两float类型数相加，结果入栈。
    public static final int CONSTANT_OPCODE_FSUB = 0x66;// 将栈顶两float类型数相减，结果入栈。
    public static final int CONSTANT_OPCODE_FMUL = 0x6a;// 将栈顶两float类型数相乘，结果入栈。
    public static final int CONSTANT_OPCODE_FDIV = 0x6e;// 将栈顶两float类型数相除，结果入栈。
    public static final int CONSTANT_OPCODE_FREM = 0x72;// 将栈顶两float类型数取模，结果入栈。
    public static final int CONSTANT_OPCODE_FNEG = 0x76;// 将栈顶float类型值取反，结果入栈。
    public static final int CONSTANT_OPCODE_DADD = 0x63;// 将栈顶两double类型数相加，结果入栈。
    public static final int CONSTANT_OPCODE_DSUB = 0x67;// 将栈顶两double类型数相减，结果入栈。
    public static final int CONSTANT_OPCODE_DMUL = 0x6b;// 将栈顶两double类型数相乘，结果入栈。
    public static final int CONSTANT_OPCODE_DDIV = 0x6f;// 将栈顶两double类型数相除，结果入栈。
    public static final int CONSTANT_OPCODE_DREM = 0x73;// 将栈顶两double类型数取模，结果入栈。
    public static final int CONSTANT_OPCODE_DNEG = 0x77;// 将栈顶double类型值取负，结果入栈。
    public static final int CONSTANT_OPCODE_ISHL = 0x78;// 左移int类型值。
    public static final int CONSTANT_OPCODE_LSHL = 0x79;// 左移long类型值。
    public static final int CONSTANT_OPCODE_ISHR = 0x7a;// 算术右移int类型值。
    public static final int CONSTANT_OPCODE_LSHR = 0x7b;// 算术右移long类型值。
    public static final int CONSTANT_OPCODE_IUSHR = 0x7c;// 逻辑右移int类型值。
    public static final int CONSTANT_OPCODE_LUSHR = 0x7d;// 逻辑右移long类型值。
    public static final int CONSTANT_OPCODE_IAND = 0x73;// 对int类型按位与运算。
    public static final int CONSTANT_OPCODE_LAND = 0x7f;// 对long类型的按位与运算。
    public static final int CONSTANT_OPCODE_IOR = 0x80;// 对int类型的按位或运算。
    public static final int CONSTANT_OPCODE_LOR = 0x81;// 对long类型的按位或运算。
    public static final int CONSTANT_OPCODE_IXOR = 0x82;// 对int类型的按位异或运算。
    public static final int CONSTANT_OPCODE_LXOR = 0x83;// 对long类型的按位异或运算。
    public static final int CONSTANT_OPCODE_IFEQ = 0x99;// 若栈顶int类型值为0则跳转。
    public static final int CONSTANT_OPCODE_IFNE = 0x9a;// 若栈顶int类型值不为0则跳转。
    public static final int CONSTANT_OPCODE_IFLT = 0x9b;// 若栈顶int类型值小于0则跳转。
    public static final int CONSTANT_OPCODE_IFLE = 0x9e;// 若栈顶int类型值小于等于0则跳转。
    public static final int CONSTANT_OPCODE_IFGT = 0x9d;// 若栈顶int类型值大于0则跳转。
    public static final int CONSTANT_OPCODE_IFGE = 0x9c;// 若栈顶int类型值大于等于0则跳转。
    public static final int CONSTANT_OPCODE_IF_ICMPEQ = 0x9f;// 若栈顶两int类型值相等则跳转。
    public static final int CONSTANT_OPCODE_IF_ICMPNE = 0xa0;// 若栈顶两int类型值不相等则跳转。
    public static final int CONSTANT_OPCODE_IF_ICMPLT = 0xa1;// 若栈顶两int类型值前小于后则跳转。
    public static final int CONSTANT_OPCODE_IF_ICMPLE = 0xa4;// 若栈顶两int类型值前小于等于后则跳转。
    public static final int CONSTANT_OPCODE_IF_ICMPGT = 0xa3;// 若栈顶两int类型值前大于后则跳转。
    public static final int CONSTANT_OPCODE_IF_ICMPGE = 0xa2;// 若栈顶两int类型值前大于等于后则跳转。
    public static final int CONSTANT_OPCODE_IFNULL = 0xc6;// 若栈顶引用值为null则跳转。
    public static final int CONSTANT_OPCODE_IFNONNULL = 0xc7;// 若栈顶引用值不为null则跳转。
    public static final int CONSTANT_OPCODE_IF_ACMPEQ = 0xa5;// 若栈顶两引用类型值相等则跳转。
    public static final int CONSTANT_OPCODE_IF_ACMPNE = 0xa6;// 若栈顶两引用类型值不相等则跳转。
    public static final int CONSTANT_OPCODE_LCMP = 0x94;// 比较栈顶两long类型值，前者大，1入栈；相等，0入栈；后者大，-1入栈。
    public static final int CONSTANT_OPCODE_FCMPL = 0x95;// 比较栈顶两float类型值，前者大，1入栈；相等，0入栈；后者大，-1入栈；有NaN存在，-1入栈。
    public static final int CONSTANT_OPCODE_FCMPG = 0x96;// 比较栈顶两float类型值，前者大，1入栈；相等，0入栈；后者大，-1入栈；有NaN存在，-1入栈。
    public static final int CONSTANT_OPCODE_DCMPL = 0x97;// 比较栈顶两double类型值，前者大，1入栈；相等，0入栈；后者大，-1入栈；有NaN存在，-1入栈。
    public static final int CONSTANT_OPCODE_DCMPG = 0x98;// 比较栈顶两double类型值，前者大，1入栈；相等，0入栈；后者大，-1入栈；有NaN存在，-1入栈。
    public static final int CONSTANT_OPCODE_GOTO = 0xa7;// 无条件跳转到指定位置。
    public static final int CONSTANT_OPCODE_GOTO_W = 0xc8;// 无条件跳转到指定位置（宽索引）。
    public static final int CONSTANT_OPCODE_TABLESWITCH = 0xaa;// 通过索引访问跳转表，并跳转。
    public static final int CONSTANT_OPCODE_LOOKUPSWITCH = 0xab;// 通过键值访问跳转表，并跳转。
    public static final int CONSTANT_OPCODE_ATHROW = 0xbf;// 抛出异常。
    public static final int CONSTANT_OPCODE_JSR = 0xa8;// 跳转到子例程序。
    public static final int CONSTANT_OPCODE_JSR_W = 0xc9;// 跳转到子例程序（宽索引）。
    public static final int CONSTANT_OPCODE_RET = 0xa9;// 返回子例程序。
    public static final int CONSTANT_OPCODE_NEW = 0xbb;// 创建新的对象实例。
    public static final int CONSTANT_OPCODE_CHECKCAST = 0xc0;// 类型强转。
    public static final int CONSTANT_OPCODE_INSTANCEOF = 0xc1;// 判断类型。
    public static final int CONSTANT_OPCODE_GETFIELD = 0xb4;// 获取对象字段的值。
    public static final int CONSTANT_OPCODE_PUTFIELD = 0xb5;// 给对象字段赋值。
    public static final int CONSTANT_OPCODE_GETSTATIC = 0xb2;// 获取静态字段的值。
    public static final int CONSTANT_OPCODE_PUTSTATIC = 0xb3;// 给静态字段赋值。
    public static final int CONSTANT_OPCODE_NEWARRAY = 0xbc;// 创建type类型的数组。
    public static final int CONSTANT_OPCODE_ANEWARRAY = 0xbd;// 创建引用类型的数组。
    public static final int CONSTANT_OPCODE_ARRAYLENGTH = 0xbe;// 获取一维数组的长度。
    public static final int CONSTANT_OPCODE_MULTIANEWARRAY = 0xc5;// 创建dimension维度的数组。
    public static final int CONSTANT_OPCODE_INVOKESPECIAL = 0xb7;// 编译时方法绑定调用方法。
    public static final int CONSTANT_OPCODE_INVOKEVIRTUAL = 0xb6;// 运行时方法绑定调用方法。
    public static final int CONSTANT_OPCODE_INVOKESTATIC = 0xb8;// 调用静态方法。
    public static final int CONSTANT_OPCODE_INVOKEINTERFACE = 0xb9;// 调用接口方法。
    public static final int CONSTANT_OPCODE_IRETURN = 0xac;// 返回int类型值。
    public static final int CONSTANT_OPCODE_LRETURN = 0xad;// 返回long类型值。
    public static final int CONSTANT_OPCODE_FRETURN = 0xae;// 返回float类型值。
    public static final int CONSTANT_OPCODE_DRETURN = 0xaf;// 返回double类型值。
    public static final int CONSTANT_OPCODE_ARETURN = 0xb0;// 返回引用类型值。
    public static final int CONSTANT_OPCODE_RETURN = 0xb1;// void函数返回。
    public static final int CONSTANT_OPCODE_MONITORENTER = 0xc2;// 进入并获得对象监视器。
    public static final int CONSTANT_OPCODE_MONITOREXIT = 0xc3;// 释放并退出对象监视器。

    public static final int UNDEFINED = -1;
    public static final int UNPREDICTABLE = -2;
    public static final int RESERVED = -3;
    /**
     * 使用到的操作数
     */
    public static final int[] NO_OF_OPERANDS = {
            0/*nop*/, 0/*aconst_null*/, 0/*iconst_m1*/, 0/*iconst_0*/,
            0/*iconst_1*/, 0/*iconst_2*/, 0/*iconst_3*/, 0/*iconst_4*/,
            0/*iconst_5*/, 0/*lconst_0*/, 0/*lconst_1*/, 0/*fconst_0*/,
            0/*fconst_1*/, 0/*fconst_2*/, 0/*dconst_0*/, 0/*dconst_1*/,
            1/*bipush*/, 2/*sipush*/, 1/*ldc*/, 2/*ldc_w*/, 2/*ldc2_w*/,
            1/*iload*/, 1/*lload*/, 1/*fload*/, 1/*dload*/, 1/*aload*/,
            0/*iload_0*/, 0/*iload_1*/, 0/*iload_2*/, 0/*iload_3*/,
            0/*lload_0*/, 0/*lload_1*/, 0/*lload_2*/, 0/*lload_3*/,
            0/*fload_0*/, 0/*fload_1*/, 0/*fload_2*/, 0/*fload_3*/,
            0/*dload_0*/, 0/*dload_1*/, 0/*dload_2*/, 0/*dload_3*/,
            0/*aload_0*/, 0/*aload_1*/, 0/*aload_2*/, 0/*aload_3*/,
            0/*iaload*/, 0/*laload*/, 0/*faload*/, 0/*daload*/,
            0/*aaload*/, 0/*baload*/, 0/*caload*/, 0/*saload*/,
            1/*istore*/, 1/*lstore*/, 1/*fstore*/, 1/*dstore*/,
            1/*astore*/, 0/*istore_0*/, 0/*istore_1*/, 0/*istore_2*/,
            0/*istore_3*/, 0/*lstore_0*/, 0/*lstore_1*/, 0/*lstore_2*/,
            0/*lstore_3*/, 0/*fstore_0*/, 0/*fstore_1*/, 0/*fstore_2*/,
            0/*fstore_3*/, 0/*dstore_0*/, 0/*dstore_1*/, 0/*dstore_2*/,
            0/*dstore_3*/, 0/*astore_0*/, 0/*astore_1*/, 0/*astore_2*/,
            0/*astore_3*/, 0/*iastore*/, 0/*lastore*/, 0/*fastore*/,
            0/*dastore*/, 0/*aastore*/, 0/*bastore*/, 0/*castore*/,
            0/*sastore*/, 0/*pop*/, 0/*pop2*/, 0/*dup*/, 0/*dup_x1*/,
            0/*dup_x2*/, 0/*dup2*/, 0/*dup2_x1*/, 0/*dup2_x2*/, 0/*swap*/,
            0/*iadd*/, 0/*ladd*/, 0/*fadd*/, 0/*dadd*/, 0/*isub*/,
            0/*lsub*/, 0/*fsub*/, 0/*dsub*/, 0/*imul*/, 0/*lmul*/,
            0/*fmul*/, 0/*dmul*/, 0/*idiv*/, 0/*ldiv*/, 0/*fdiv*/,
            0/*ddiv*/, 0/*irem*/, 0/*lrem*/, 0/*frem*/, 0/*drem*/,
            0/*ineg*/, 0/*lneg*/, 0/*fneg*/, 0/*dneg*/, 0/*ishl*/,
            0/*lshl*/, 0/*ishr*/, 0/*lshr*/, 0/*iushr*/, 0/*lushr*/,
            0/*iand*/, 0/*land*/, 0/*ior*/, 0/*lor*/, 0/*ixor*/, 0/*lxor*/,
            2/*iinc*/, 0/*i2l*/, 0/*i2f*/, 0/*i2d*/, 0/*l2i*/, 0/*l2f*/,
            0/*l2d*/, 0/*f2i*/, 0/*f2l*/, 0/*f2d*/, 0/*d2i*/, 0/*d2l*/,
            0/*d2f*/, 0/*i2b*/, 0/*i2c*/, 0/*i2s*/, 0/*lcmp*/, 0/*fcmpl*/,
            0/*fcmpg*/, 0/*dcmpl*/, 0/*dcmpg*/, 2/*ifeq*/, 2/*ifne*/,
            2/*iflt*/, 2/*ifge*/, 2/*ifgt*/, 2/*ifle*/, 2/*if_icmpeq*/,
            2/*if_icmpne*/, 2/*if_icmplt*/, 2/*if_icmpge*/, 2/*if_icmpgt*/,
            2/*if_icmple*/, 2/*if_acmpeq*/, 2/*if_acmpne*/, 2/*goto*/,
            2/*jsr*/, 1/*ret*/, UNPREDICTABLE/*tableswitch*/, UNPREDICTABLE/*lookupswitch*/,
            0/*ireturn*/, 0/*lreturn*/, 0/*freturn*/,
            0/*dreturn*/, 0/*areturn*/, 0/*return*/,
            2/*getstatic*/, 2/*putstatic*/, 2/*getfield*/,
            2/*putfield*/, 2/*invokevirtual*/, 2/*invokespecial*/, 2/*invokestatic*/,
            4/*invokeinterface*/, UNDEFINED, 2/*new*/,
            1/*newarray*/, 2/*anewarray*/,
            0/*arraylength*/, 0/*athrow*/, 2/*checkcast*/,
            2/*instanceof*/, 0/*monitorenter*/,
            0/*monitorexit*/, UNPREDICTABLE/*wide*/, 3/*multianewarray*/,
            2/*ifnull*/, 2/*ifnonnull*/, 4/*goto_w*/,
            4/*jsr_w*/, 0/*breakpoint*/, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED, UNDEFINED,
            UNDEFINED, UNDEFINED, RESERVED/*impdep1*/, RESERVED/*impdep2*/
    };

}